import { defineStore } from "pinia";
import { computed, reactive, ref } from "vue";

// 接下来是组合式API写法
const StatusStore=defineStore('Status',()=>{
    // 1.定义单个选项类型
    interface StatusOption{
        id:number; //状态选项的唯一标识
        name:string; //选项的显示名称
    }
    
    // 2.定义枚举对象（所有选项的合集）
    const StatusEnum={
        // 每个选项都是EnumOption类型
        All:{id:1,name:"所有状态"},
        Normal:{id:2,name:"正常"}
    } as const;
    
    // 3.提取枚举的键类型All,Normal
    type StatusEnumKey=keyof typeof StatusEnum;
    
    // 4.提取枚举的选项类型(所有选项的联合类型)
    type StatusEnumOption = typeof StatusEnum[StatusEnumKey];
    
    // 5. 获取所有选项（返回数组，用于下拉框渲染等场景）,并将函数暴露出去
    const getAllStatusOptions = (): StatusEnumOption [] => {
        // return Object.values(StatusEnum);
        return Object.values(StatusEnum);
    };
    
    // 6. 根据 id 查找对应的名称方法，并暴露出去
    const getStatusNameById = (id: number): string | undefined => {
        return Object.values(StatusEnum).find(option => option.id === id)?.name;
      };
    
    //   根据name查找对应的名称方法，并暴露出去
    const getStatusNameByName = (name: string): number | undefined => {
        return Object.values(StatusEnum).find(option => option.name === name)?.id;
    };

    //   根据name查找对应的名称方法，并暴露出去
    // const getStatusByName = (name: string): number | undefined => {
    //     return Object.values(StatusEnum).find(option => option.name === name);
    // };
    return {StatusEnum,getAllStatusOptions,getStatusNameById,getStatusNameByName};
})
// 注意最后要暴露
export {StatusStore}